﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Text.RegularExpressions;  
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using BusinessLogicTier;
using DTO;

namespace QUANLYNHASACH
{
    public partial class FrmNhaCungCap : Form
    {
        NhaCupCapBUG objncc = new NhaCupCapBUG();

        DataTable tbNhaCungCap;

        public static string strMaNCC;

        public FrmNhaCungCap()
        {
            InitializeComponent();
            
        }

        private void FrmNhaCungCap_Load(object sender, EventArgs e)
        {
            // Load dữ liệu lên datagridview và định dạng các chuyên mục
            tbNhaCungCap = objncc.GetNCC();
            dataGridView_NhaCungCap.DataSource = tbNhaCungCap;
            DinhDangLuoi();

            ////Load dữ liệu lên checkedlistbox
            ListBox list = checkedListBox_TenHangHoa as ListBox;
            list.DataSource = objncc.GetTenHH();
            list.DisplayMember = "TENHANG";
            list.ValueMember = "TENHANG";
        }

        private void Refresh()
        {
            txt_MaNCC.Text = null;
            txt_HoTen.Text = null;
            txt_DiaChi.Text = null;
            txt_SDT.Text = null;
            txt_Email.Text = null;
            txt_NoDauKy.Text = null;

            //Lấy danh sách mã hàng bên bảng HANGHOA
            DataTable tbMaHang_HH = new DataTable();
            tbMaHang_HH = objncc.GetTenHH();
            int count1 = tbMaHang_HH.Rows.Count;
            for (int m = 0; m < count1; m++)
                checkedListBox_TenHangHoa.SetItemChecked(m, false);

            checkBox_TenHangHoa.Checked = false;

            radioButton_MaNhaCC.Checked = false;
            radioButton_TenNhaCC.Checked = false;

            tbNhaCungCap = objncc.GetNCC();
            dataGridView_NhaCungCap.DataSource = tbNhaCungCap;
        }

        // Hiển thị các chuyên mục trên datagridview
        private void DinhDangLuoi()
        {
            dataGridView_NhaCungCap.Columns[0].Width = 120;
            dataGridView_NhaCungCap.Columns[0].HeaderText = "Mã Nhà Cung Cấp";
            dataGridView_NhaCungCap.Columns[1].Width = 120;
            dataGridView_NhaCungCap.Columns[1].HeaderText = "Họ Tên";
            dataGridView_NhaCungCap.Columns[2].Width = 120;
            dataGridView_NhaCungCap.Columns[2].HeaderText = "Địa Chỉ";
            dataGridView_NhaCungCap.Columns[3].Width = 118;
            dataGridView_NhaCungCap.Columns[3].HeaderText = "Số Điện Thoại";
            dataGridView_NhaCungCap.Columns[4].Width = 140;
            dataGridView_NhaCungCap.Columns[4].HeaderText = "Email";
            dataGridView_NhaCungCap.Columns[5].Width = 100;
            dataGridView_NhaCungCap.Columns[5].HeaderText = "Nợ Đầu Kỳ";
        }

        // Hiện dữ liệu khi click vào datagridview
        private void dataGridView_NhaCungCap_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                DataGridViewRow row = new DataGridViewRow();
                row = dataGridView_NhaCungCap.Rows[e.RowIndex];
                txt_MaNCC.Text = row.Cells[0].Value.ToString().Trim();
                txt_HoTen.Text = row.Cells[1].Value.ToString().Trim();
                txt_DiaChi.Text = row.Cells[2].Value.ToString().Trim();
                txt_SDT.Text = row.Cells[3].Value.ToString().Trim();
                txt_Email.Text = row.Cells[4].Value.ToString().Trim();
                txt_NoDauKy.Text = row.Cells[5].Value.ToString().Trim();

                //Lấy danh sách mã hàng bên bảng HANGHOA
                DataTable tbMaHang_HH = new DataTable();
                tbMaHang_HH = objncc.GetTenHH();
                int count1 = tbMaHang_HH.Rows.Count;

                //Lấy danh sách mã hàng bên bảng CHITIETHANGCC
                DataTable tbMaHang_CTHCC = new DataTable();
                tbMaHang_CTHCC = objncc.GetDanhSachHH_CTHCC(row.Cells[0].Value.ToString().Trim());
                int count2 = tbMaHang_CTHCC.Rows.Count;

                //Kiểm tra và checked
                for (int m = 0; m < count1; m++)
                    checkedListBox_TenHangHoa.SetItemChecked(m, false);
                for (int i = 0; i < count2; i++)
                {
                    for (int j = 0; j < count1; j++)
                    {
                        if (tbMaHang_CTHCC.Rows[i]["MAHANG"].ToString().Trim() == tbMaHang_HH.Rows[j]["MAHANG"].ToString().Trim())
                        {
                            checkedListBox_TenHangHoa.SetItemChecked(j, true);
                        }
                    }
                }
            }
            catch (Exception)
            {
            }
        }

        // Chống paste chuỗi vào textbox số điện thoai
        public void txt_SDT_TextChanged(object sender, EventArgs e)
        {
            string temp = "";
            int pnt = 0;
            Regex reg = new Regex("^-?(\\d+\\.?\\d*)*$");
            TextBox tb = sender as TextBox;
            if (!reg.IsMatch(tb.Text))
            {
                tb.Text = temp;
                tb.SelectionStart = pnt;
            }
            else
                temp = tb.Text;
        }

        // Kiểm tra số điện thoại nhập vào
        private void txt_SDT_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
                e.Handled = true;

            if (txt_SDT.Text.Length >= 11)
            {
                MessageBox.Show("Số điện thoại không được quá 11 số",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                txt_SDT.Focus();
                e.Handled = true;
            }
        }

        // Chống paste chuỗi vào textbox số nợ đầu kỳ
        public void txt_NoDauKy_TextChanged(object sender, EventArgs e)
        {
            string temp = "";
            int pnt = 0;
            Regex reg = new Regex("^-?(\\d+\\.?\\d*)*$");
            TextBox tb = sender as TextBox;
            if (!reg.IsMatch(tb.Text))
            {
                tb.Text = temp;
                tb.SelectionStart = pnt;
            }
            else
                temp = tb.Text;
        }

        // Chỉ cho nhập số thực và số nguyên
        private void txt_NoDauKy_KeyPress(object sender, KeyPressEventArgs e)
        {
            string decimalString = Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
            char decimalChar = Convert.ToChar(decimalString);

            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)) { }
            else if (e.KeyChar == decimalChar && txt_NoDauKy.Text.IndexOf(decimalChar) == -1) { }
            else
            {
                e.Handled = true;
            }

        }

        //Random STT
        private int RanDomSTT()
        {
            string lastID;
            int kq;
            tbNhaCungCap = objncc.GetSTTHienTai();
            if (tbNhaCungCap.Rows.Count == 0)
                lastID = "0";
            else
                lastID = tbNhaCungCap.Rows[0][0].ToString();
            kq = Random.AutoCodeSTT(lastID);
            return kq;
        }

        private void BTThem_Click(object sender, EventArgs e)
        {
            try
            {
                if (txt_MaNCC.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_MaNCC.Focus();
                    return;
                }
                if (txt_HoTen.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_HoTen.Focus();
                    return;
                }
                if (txt_DiaChi.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_DiaChi.Focus();
                    return;
                }
                if (txt_SDT.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_SDT.Focus();
                    return;
                }
                if (txt_Email.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_Email.Focus();
                    return;
                }
                if (txt_NoDauKy.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_NoDauKy.Focus();
                    return;
                }

                // Kiểm tra tính hợp lệ của email
                string match = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                    @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                    @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
                Regex reg = new Regex(match);
                if (reg.IsMatch(this.txt_Email.Text) == false)
                {
                    MessageBox.Show("Email không hợp lệ",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_Email.Focus();
                    return;
                }

                if (objncc.kiemtranmanncc(txt_MaNCC.Text) == true)
                {
                    MessageBox.Show("Mã nhà cung cấp đã tồn tại",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                    txt_MaNCC.Focus();
                    return;
                }
                else
                {

                    float nodauky = float.Parse(txt_NoDauKy.Text);
                    NhaCungCap ncc = new NhaCungCap(txt_MaNCC.Text.Trim(), txt_HoTen.Text.Trim(), txt_DiaChi.Text.Trim(), txt_SDT.Text.Trim(), txt_Email.Text.Trim(), nodauky);
                    if (objncc.Insert(ncc) == true)
                    {
                        MessageBox.Show("Thêm dữ liệu thành công",
                        "Successfull",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);

                        //Thêm những hàng hóa mà nhà cung cấp có
                        try
                        {
                            int count = checkedListBox_TenHangHoa.Items.Count;
                            for (int i = 0; i < count; i++)
                            {
                                int stt;
                                string mahang, tenhang;
                                stt = RanDomSTT();
                                if (checkedListBox_TenHangHoa.GetItemCheckState(i) == CheckState.Checked)
                                {
                                    tbNhaCungCap = objncc.GetTenHH();
                                    mahang = tbNhaCungCap.Rows[i]["MAHANG"].ToString();
                                    tenhang = tbNhaCungCap.Rows[i]["TENHANG"].ToString();
                                    objncc.InsertHH(stt, txt_MaNCC.Text.ToString(), mahang, tenhang);
                                }
                            }
                        }
                        catch (Exception)
                        {
                        }
                        Refresh();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Không thể thêm dữ liệu", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void BTXoa_Click(object sender, EventArgs e)
        {
            if (txt_MaNCC.Text.Trim() == "")
            {
                MessageBox.Show("Bạn chưa nhập mã nhà cung cấp cần xóa",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                txt_MaNCC.Focus();
                return;
            }
            if (txt_MaNCC.Text.Trim() == "null")
            {
                MessageBox.Show("Mã nhà cung cấp này không được xóa vì đó là giá trị mặc định",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                txt_MaNCC.Focus();
                return;
            }
            if (objncc.kiemtranmanncc(txt_MaNCC.Text) == false)
            {
                MessageBox.Show("Mã nhà cung cấp không tồn tại trong Database",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error);
                txt_MaNCC.Focus();
                return;
            }
            if (objncc.Delete(txt_MaNCC.Text) == true)
            {
                if (objncc.DeleteTenHang(txt_MaNCC.Text.Trim()))
                {
                    MessageBox.Show("Xóa dữ liệu thành công",
                    "Successfull",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    Refresh();
                }

                
            }
        }

        private void BTSua_Click(object sender, EventArgs e)
        {
            try
            {
                if (txt_MaNCC.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_MaNCC.Focus();
                    return;
                }
                if (txt_HoTen.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_HoTen.Focus();
                    return;
                }
                if (txt_DiaChi.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_DiaChi.Focus();
                    return;
                }
                if (txt_SDT.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_SDT.Focus();
                    return;
                }
                if (txt_Email.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_Email.Focus();
                    return;
                }
                if (txt_NoDauKy.Text.Trim() == "")
                {
                    MessageBox.Show("Bạn chưa nhập đầy đủ thông tin",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_NoDauKy.Focus();
                    return;
                }

                // Kiểm tra tính hợp lệ của email
                string match = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                    @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                    @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
                Regex reg = new Regex(match);
                if (reg.IsMatch(this.txt_Email.Text) == false)
                {
                    MessageBox.Show("Email không hợp lệ",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_Email.Focus();
                    return;
                }

                if (txt_MaNCC.Text.Trim() == "null")
                {
                    MessageBox.Show("Mã nhà cung cấp này không được cập nhật vì đó là giá trị mặc định",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_MaNCC.Focus();
                    return;
                }

                if (objncc.kiemtranmanncc(txt_MaNCC.Text) == false)
                {
                    MessageBox.Show("Mã nhà cung cấp không tồn tồn tại nên không thể cập nhật",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                    txt_MaNCC.Focus();
                    return;
                }
                else
                {

                    float nodauky = float.Parse(txt_NoDauKy.Text);
                    NhaCungCap ncc = new NhaCungCap(txt_MaNCC.Text, txt_HoTen.Text, txt_DiaChi.Text, txt_SDT.Text, txt_Email.Text, nodauky);
                    if (objncc.Update(ncc) == true)
                    {
                        MessageBox.Show("Cập nhật dữ liệu thành công",
                        "Successfull",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);

                        //Xóa danh sách hàng cũ
                        objncc.DeleteTenHang(txt_MaNCC.Text.Trim());

                        //Thêm những hàng hóa mà nhà cung cấp có
                        try
                        {
                            int count = checkedListBox_TenHangHoa.Items.Count;
                            for (int i = 0; i < count; i++)
                            {
                                int stt;
                                string mahang, tenhang;
                                stt = RanDomSTT();
                                if (checkedListBox_TenHangHoa.GetItemCheckState(i) == CheckState.Checked)
                                {
                                    tbNhaCungCap = objncc.GetTenHH();
                                    mahang = tbNhaCungCap.Rows[i]["MAHANG"].ToString();
                                    tenhang = tbNhaCungCap.Rows[i]["TENHANG"].ToString();
                                    objncc.InsertHH(stt, txt_MaNCC.Text.ToString(), mahang, tenhang);
                                }
                            }
                        }
                        catch (Exception)
                        {
                        }
                        Refresh();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Không thể cập nhật dữ liệu", "Lỗi", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void BTRefresh_Click(object sender, EventArgs e)
        {
            Refresh();
        }

        private void BTThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox_TenHangHoa.Checked)
            {
                for (int i = 0; i < checkedListBox_TenHangHoa.Items.Count; i++)
                    checkedListBox_TenHangHoa.SetItemChecked(i, true);
            }
            else
            {
                for (int i = 0; i < checkedListBox_TenHangHoa.Items.Count; i++)
                    checkedListBox_TenHangHoa.SetItemChecked(i, false);
            }
        }

        private void BTTimKiem_Click(object sender, EventArgs e)
        {
            if (radioButton_MaNhaCC.Checked == false && radioButton_TenNhaCC.Checked == false)
            {
                MessageBox.Show("Xin chọn hình thức tìm kiếm",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                return;
            }
            if (txt_TimKiem.Text.Trim() == "")
            {
                MessageBox.Show("Nhập thông tin cần tìm kiếm",
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                txt_TimKiem.Focus();
                return;
            }
            if (radioButton_MaNhaCC.Checked == true)
            {
                if (objncc.KiemTraTheoMa(txt_TimKiem.Text.Trim()) == false)
                {
                    MessageBox.Show("Mã hàng không tồn tại nên không thể tìm kiếm",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TimKiem.Focus();
                    return;
                }
                else
                {
                    tbNhaCungCap = objncc.GetALLNhaCCTheoMa(txt_TimKiem.Text.Trim());
                    dataGridView_NhaCungCap.DataSource = tbNhaCungCap;
                }
            }
            if (radioButton_TenNhaCC.Checked == true)
            {
                if (objncc.KiemTraTheoTenHang(txt_TimKiem.Text.Trim()) == false)
                {
                    MessageBox.Show("Tên hàng không tồn tại nên không thể tìm kiếm",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                    txt_TimKiem.Focus();
                    return;
                }
                else
                {
                    tbNhaCungCap = objncc.GetALLNhaCCTheoTen(txt_TimKiem.Text.Trim());
                    dataGridView_NhaCungCap.DataSource = tbNhaCungCap;
                }
            }
        }
    }
}
